package com.itcam.project.xxljob;

import cn.hutool.core.util.StrUtil;
import com.itcam.iahcommon.model.entity.Generator;
import com.itcam.project.manager.CosManager;
import com.itcam.project.mapper.GeneratorMapper;
import com.xxl.job.core.handler.annotation.XxlJob;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;
import java.util.List;
import java.util.stream.Collectors;

@Component
@Slf4j
public class ClearCosJobHandler {

    // 🛠️【工具间】装备COS管理器和生成器数据库操作工具
    @Resource
    private CosManager cosManager;
    @Resource
    private GeneratorMapper generatorMapper;

    /**
     * 🧹【每日大扫除】定时清理COS云存储空间
     * 执行逻辑：
     * 1. 清理【临时工坊区】- 用户上传的模板文件（类似清理工坊废料）
     * 2. 回收【废弃成品区】- 已删除生成器的产物包（类似处理过期商品）
     */
    @XxlJob("clearCosJobHandler")
    public void clearCosJobHandler() throws Exception {
        log.info("🚚 清洁车发车，开始今日云存储大扫除...");

        // 🧼 任务1：打扫模板制作临时工坊
        log.info("🧽 清洁工坊区：/generator_make_template/");
        cosManager.deleteDir("/generator_make_template/"); // 清空整个工坊区域

        // 🗑️ 任务2：处理废弃成品仓库
        log.info("🔍 检索已下架商品清单...");
        List<Generator> deletedGenerators = generatorMapper.listDeletedGenerator(); // 查数据库找"已下架"商品

        if (!deletedGenerators.isEmpty()) {
            log.info("📦 发现{}件待清理商品", deletedGenerators.size());

            // 🏷️ 给每个商品贴上销毁标签（处理路径格式）
            List<String> fileKeys = deletedGenerators.stream()
                    .map(Generator::getDistPath)  // 取出商品货架号
                    .filter(StrUtil::isNotBlank)   // 过滤无效标签
                    .map(path -> path.startsWith("/") ? path.substring(1) : path) // 修正货架号格式
                    .collect(Collectors.toList());

            log.info("🗂️ 准备批量销毁{}个商品", fileKeys.size());
            cosManager.deleteObjects(fileKeys); // 传送带批量处理
        } else {
            log.info("🎉 废弃仓库空空如也，无需清理！");
        }

        log.info("🏁 今日清洁任务圆满完成！");
    }
}